package start;

import lombok.SneakyThrows;

/**
 * 测试第二个版本内容提供提交master提交
 */
public class CRC32Util {
    //dev提交

    static String CRC32_PASSWORD ="CMBChina2009";
    static String CRC32_PREFIX ="Z";

    /**
     * 生成规则: CRC32_PASSWORD + key + xmlData(需去掉回车换行符) 拼接成一个字符串,通过
     crc32 校验规则生成字符串.
     *把该字符串转换成 16 进制,然后再大写,如果不足八位,则左补 0,最后再加前缀 CRC32_PREFIX
     * @param key
     * @param xmlData
     * @return
     */
    @SneakyThrows
    public static String getCheckSumWithCRC32(String key, String xmlData){
        java.util.zip.CRC32 crc32 = new java.util.zip.CRC32();
        String str = CRC32_PASSWORD + key + xmlData
                .replaceAll("\\r","")
                .replaceAll("\\n", "");
        crc32.update(str.getBytes("GBK")); //如果不指定 gbk，就会取平台默认字符集
        String result = Long.toHexString(crc32.getValue()).toUpperCase();
        String pattern="00000000";
        return CRC32_PREFIX + pattern.substring(0, pattern.length()-result.length())
                + result ;
    }
}
